﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using FM.Common;
using FM.Events;
using FM.时钟.Events;
using FM.时钟.Models;
using FM.时钟.Services;
using FM.时钟.Views;
using FM.时钟.接口;
using Microsoft.Practices.Prism.Commands;
using Microsoft.Practices.Prism.Mvvm;
using Microsoft.Practices.Prism.PubSubEvents;
using Microsoft.Practices.Unity;

namespace FM.时钟.ViewModels
{
    public class 主窗口ViewModel : BindableBase
    {
        private 数据[] _数据列表;

        private IEventAggregator 新闻部;
        private IUnityContainer 人事部;
        private bool _is置顶;

        public 主窗口ViewModel(IUnityContainer 人事部cs, IEventAggregator 新闻部cs)
        {
            人事部 = 人事部cs;
            新闻部 = 新闻部cs;
            新闻部.GetEvent<配置更新Event>().Subscribe(配置更新Action, true);

            置顶 = new DelegateCommand<object>(置顶Action);
            修改 = new DelegateCommand<object>(修改Action);
            保存 = new DelegateCommand<object>(保存Action);
            退出 = new DelegateCommand<object>(退出Action);

        }

        private void 置顶Action(object obj)
        {
            var 当前置顶状态 = !小冰.主窗口.Topmost;
            Is置顶 = 当前置顶状态;
            小冰.主窗口.Topmost = 当前置顶状态;
            系统配置服务1.系统配置1.置顶 = 当前置顶状态;
        }

        private void 修改Action(object obj)
        {
            var 视图2 = 人事部.Resolve<数据编辑视图>();

            视图2.LoadViewModel();
            视图2.ShowDialog();
        }

        private void 退出Action(object obj)
        {
            App.Current.Shutdown();
        }

        private void 保存Action(object obj)
        {
            新闻部.GetEvent<保存配置Event>().Publish(obj);
        }


        private void 配置更新Action(系统配置 obj)
        {
            Is置顶 = 小冰.主窗口.Topmost;


            数据列表 = obj.数据列表;
            定时器2.定时列表.ForEach(x =>
            { if (x != null) x.Stop(); });
            定时器2.定时列表.Clear();
            foreach (var data in 数据列表)
            {
                var data1 = data;
                if (data1.定时刷新)
                {
                    定时器2.循环(data.定时刷新毫秒, () =>
                    data1.显示文字 = DateTime.Now.ToString(data1.时间格式));
                }
            }
        }

        public bool Is置顶
        {
            get { return _is置顶; }
            set {SetProperty( ref _is置顶 , value); }
        }

        public ICommand 置顶 { get; set; }

        public ICommand 保存 { get; set; }

        public ICommand 退出 { get; set; }

        public ICommand 修改 { get; set; }

        public 数据[] 数据列表
        {
            get { return _数据列表; }
            set { SetProperty(ref _数据列表, value); }
        }
    }
}
